/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package logica;

import fisica.CapaFisica;
import fisica.InformacionSocialFisica;
import hibernate.objeto.InformacionSocial;
import hibernate.objeto.Paciente;

/**
 *
 * @author Gonzalo
 */
public class InformacionSocialLogica extends CapaLogica {

    /**
     * Crea la información social para el paciente.
     *
     * @param datosInformacionSocialPersonal Los datos personales
     * correspondientes a la ficha
     * @param datosInformacionSocialGrupoConviviente Los datos del grupo
     * conviviente correspondientes a la ficha
     * @param unPaciente El paciente a quien se le carga la ficha
     * @return true si se agregó/modificó correctamente, false en caso contrario
     */
    public static boolean agregarOModificarInformacionSocial(
            Object[] datosInformacionSocialPersonal,
            Object[][] datosInformacionSocialGrupoConviviente,
            Paciente paciente) {
        //Crea el objeto InformacionSocial
        InformacionSocial informacionSocial =
                crearUObtenerObjetoInformacionSocial(
                datosInformacionSocialPersonal, paciente);

        //Persiste el objetoInformacionSocial
        if (CapaFisica.guardarOActualizarObjeto(informacionSocial)) {
            //Agrega/modifica el GrupoConvivienteInformacionSocial asociado
             if (GrupoConvivienteInformacionSocialLogica.
                     agregarOModificarGrupoConvivienteInformacionSocial(
                     datosInformacionSocialGrupoConviviente, informacionSocial)) {
                 //Asocia la informacion social al paciente
                 paciente.setInformacionSocial(informacionSocial);
                 if (CapaFisica.guardarOActualizarObjeto(paciente)) {
                     return true;
                 }
             }
            //Si todo esta ok retorna verdadero
            return true;
        } else {
            return false;
        }
    }

    /**
     * Crea/obtiene un objeto informacion social con los datos pasados por
     * parámetro.
     *
     * @param datosInformacionSocialPersonal Los datos a cargar
     * @param paciente El paciente a quien se le carga la información
     * @return El objeto InformacionSocial creado
     */
    private static InformacionSocial crearUObtenerObjetoInformacionSocial(
            Object[] datosInformacionSocialPersonal, Paciente paciente) {

        InformacionSocial informacionSocial = paciente.getInformacionSocial();

        if (informacionSocial == null) {
            informacionSocial = new InformacionSocial();
        }

        //Informacion Social 0: Nivel de enseñanza
        if (datosInformacionSocialPersonal[
                INFORMACION_SOCIAL_NIVEL_DE_ENSEÑANZA] != null) {
            informacionSocial.setNivelDeEnsenianzaInformacionSocial(
                datosInformacionSocialPersonal[
                INFORMACION_SOCIAL_NIVEL_DE_ENSEÑANZA].toString());
        } else {
            informacionSocial.setNivelDeEnsenianzaInformacionSocial(
                "");
        }
        //Informacion Social 1: Ingresos
        informacionSocial.setIngresosTotalesInformacionSocial(
                Integer.valueOf(datosInformacionSocialPersonal[
                INFORMACION_SOCIAL_INGRESOS_GRUPO_CONVIVIENTE].toString()));
        //Informacion Social 2: Cantidad de convientes
        informacionSocial.setCantidadDeConvivientesInformacionSocial(
                Integer.valueOf(datosInformacionSocialPersonal[
                INFORMACION_SOCIAL_CANTIDAD_DE_CONVIVIENTES].toString()));

        return informacionSocial;
    }

    /**
     * Retorna el objeto InformacionSocial según el id.
     *
     * @param idInformacionSocial El id de la información social
     * @return El objeto InformacionSocial consultado, null si no existe
     */
    public static InformacionSocial getInformacionSocialPorId(
            int idInformacionSocial) {
        return InformacionSocialFisica.getInformacionSocialPorId(
                idInformacionSocial);
    }

    /**
     * Retorna el texto HTML correspondiente a la descripcion de la información
     * social.
     *
     * @param informacionSocial La información social.
     * @return El String que contiene el HTML
     */
    public static String getInformacionSocialHTML(InformacionSocial informacionSocial) {
        String informacionSocialHTML = "";
        
        if (informacionSocial != null) {
            informacionSocialHTML =
                    "<font size=\"3\" face=\"arial\" color=\"blue\">INFORMACION SOCIAL</font><br> " +
                    "<font size=\"3\" face=\"arial\" color=\"black\">Nivel de enseñanza: </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    informacionSocial.getNivelDeEnsenianzaInformacionSocial() + "</font><br>" +
                    "<font size=\"3\" face=\"arial\" color=\"black\">Ingresos totales: </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    informacionSocial.getIngresosTotalesInformacionSocial() + "</font><br>" +
                    "<font size=\"3\" face=\"arial\" color=\"black\">Cantidad de convivientes: </font>"
                    + "<font size=\"3\" face=\"arial\">" +
                    informacionSocial.getCantidadDeConvivientesInformacionSocial() + "</font><br>" +
                    GrupoConvivienteInformacionSocialLogica.getGrupoConvivienteInformacionSocialHTML(
                    informacionSocial);
        } else {
            informacionSocialHTML =
                    "<font size=\"3\" face=\"arial\" color=\"blue\">INFORMACION SOCIAL</font><br> " +
                    "<font size=\"3\" face=\"arial\">No posee</font><br></font>";
        }

        return informacionSocialHTML;
    }

}
